/**
 * author : 김기만 최초 페이지
 */

(function($) {
    var GlobalObj = function() {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // Local Storage 키 리스트
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.VERSION = {
            // 현재 버전
            current : "0.8.6",
            // 최신 버전
            newest : ""
        };
        this.STORAGE_KEY = {
            // 부킹 확정 예약 안내 동의 체크 값 저장 키
            booking_payment_agree : "bookingpaymentagree",
            // 자동 로그인 여부
            login_isauto : "loginisauto",
            //  자동 로그인 아이디
            login_auto_id : "loginautoid",
            //  자동 로그인 패스워드
            login_auto_pass : "loginautopass",
            // 알림 설정 여부
            setup_notification : "setupNotification",

            // Billing 관련
            // 예약 타입
            billing_reserv_type : "billingreservtype",
            // 예약 번호
            billing_reserv_id : "billingreservid",
            // 결제 방식
            billing_method : "billingmethod",
            //  유저 ID
            billing_user_id : "billinguserid"
        };
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 부킹 관련 데이터
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.BOOKING_DATA = {
            calendar : {// 달력 관련 데이터
                curdate : {// Calendar 현재 표시할 날짜
                    year : 0,
                    month : 0,
                    day : 0
                },
                selectDate : null // 선택한 날짜 데이터
            },
            category : {// 상단 검색 조건 데이터
                searchReservation : 0, // 카테고리 : 예약 종류 0 - 실시간 예약, 1 - 웨이팅 예약, 2 - 자선 예약
                searchArea : -1, // 카테고리 : 지역
                searchCourse : -1 // 카테고리 : 골프장
            },
            popSelectMyArea : null, // 팝업으로 지정한 데이터 임시 저장
            bookingview : {// 부킹 상세 보기 데이터
                // 예약 번호
                reserv_id : null,
                // 예약 종류
                reservation : null,
                // 지역
                area : null
            },
            coursePrice : {
                // 예약 번호
                reserv_id : null
            },
            courseInfo : {
                // 예약 번호
                reserv_id : null
            },
            account_ok : {
                // 예약 번호
                reserv_id : null,
                // 예약 종류
                reservation : null,
                // 지역
                area : null,
                // 예약 타입
                reserv_type : null
            },
            payment : {
                // 가승인 결제 동의 체크 여부
                agree_check : null
            }
        };
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 인덱스 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 로그인 전 최초 페이지
        this.golfinIndex = new GolfinIndex();
        // 로그인 후 최초 페이지
        this.golfin_myindex = new GolfinMyIndex();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 메인 메뉴 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.gnb_menu = new clsNavi();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 로그인 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.LOGIN_DATA = {
            isLogin : false, // 로그인 했는지 여부
            loginBeforeUrl : null, // 로그인 페이지에서 이전 페이지로 진행시 필요한 URL
            loginAfterUrl : null, // 로그인 후 이동할 페이지
            userId : null, // 로그인 아이
            nickname : null, // 닉네임
            userName : null // 사용자 이름
        };
        this.member_login = new Member_Login();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 알림 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.inc_info_booking = new IncInfoBooking();
        this.inc_inform = new IncInform();
        this.inc_letter = new IncLetter();
        this.inc_letter_send = new IncLetterSend();
        this.inc_letter_keep = new IncLetterKeep();

        this.NOTIFICATION_COUNT_DATA = {
            "booking" : 0,
            "notification" : 0,
            "letter" : 0
        };
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 회원가입 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.member_join = new Member_Join();
        this.member_join_01 = new Member_Join_01();
        this.member_join_02 = new Member_Join_02();

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 아이디/패스워드 찾기 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.member_id = new Member_Id();
        this.member_pw = new Member_Pw();

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 환경설정 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.inc_setup = new IncSetup();
        this.inc_setup_out = new IncSetupOut();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 자선 예약 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.booking_donation = new BookingDonation();
        this.booking_donation_my = new BookingDonationMy();
        this.booking_donation_view = new BookingDonationView();
        this.DONATION_DATA = {
            donation_seq : null
        }
        this.donation_offer_popup = new DonationOfferPopup();
        this.donation_account = new DonationAccount();
        this.donation_account_01 = new DonationAccount01();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 동호회
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //동호회홈
        this.club = new Club();
        this.club_my = new ClubMy();

        //개별동호회
        this.self_club = new SelfClub();

        this.club_board_list = new ClubBoardList();
        this.club_board_view = new ClubBoardView();
        this.club_board_write = new ClubBoardWrite();

        this.club_album_list = new ClubAlbumList();
        this.club_album_view = new ClubAlbumView();
        this.club_album_write = new ClubAlbumWrite();

        this.club_round_list = new ClubRoundList();
        this.club_round_view = new ClubRoundView();
        this.club_round_record = new ClubRoundRecord();
        this.club_round_assign = new ClubRoundAssign();
        this.club_round_assign_view = new ClubRoundAssignView();

        this.club_admin_control = new ClubAdminControl();
        this.club_admin_agree = new ClubAdminAgree();
        this.club_admin_letter = new ClubAdminLetter();
        this.club_admin_letter_view = new ClubAdminLetterView();
        this.club_admin_letter_write = new ClubAdminLetterWrite();
        
        this.club_join = new ClubJoin();
        
        this.CLUB_DATA = {}
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 고객센터 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.customer_qna = new CustomerQna();
        this.my_customer = new MyCustomer();
        this.customer_notice = new CustomerNotice();
        this.customer_qnawrite = new CustomerQnaWrite();
        this.customer_qna_view = new CustomerQnaView();
        this.customer_qna_modify = new CustomerQnaModify();
        this.customer_notice_view = new CustomerNoticeView();
        this.QNA_DATA = {
            qna_seq : null
        };
        this.NOTICE_DATA = {
            notice_seq : null
        };
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 마이골프인 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //마이골프인 전역변수
        this.MYPAGE_DATA = null;

        // 프로필
        // 서정 추가
        this.profile = new Profile();
        this.profile_modify = new Profile_modify();
        this.profile_view = new Profile_View();
        this.letter_write = new Letter_Write();
        this.letter_view = new Letter_View();
        this.img_view = new ImgView();
        // 서정 추가

        //스코어 (스코어수정은 나중에 ... )
        this.my_score = new MyScore();
        this.my_score_view = new MyScoreView();
        this.my_score_state = new MyScoreState();
        this.my_score_record = new MyScoreRecord();
        this.my_score_modify = new MyScoreModify();
        this.my_card_view = new MyCardView();
        this.my_card_record = new MyCardRecord();

        //조인정보
        this.my_join_info = new MyJoinInfo();
        this.my_join_info_part = new MyJoinInfoPart();

        //부킹정보
        this.my_booking_info = new MyBookingInfo();
        this.my_booking_info_donation = new MyBookingInfoDonation();
        this.my_booking_info_wait = new MyBookingInfoWait();

        //결제/마일리지
        this.my_mileage = new MyMileage();
        this.my_mileage_view = new MyMilegeView();

        //개인정보변경
        this.my_modify = new MyModify();

        //로그인 한 유저의 프로필인지 타인의 프로필인지 비교 및 쪽지를 보낼때 쓰인다 프로필 클릭시 값을 넣어주길 바람
        this.PROFILE_DATA = {
            userId : "kimkm",
            nickName : "doonge"
            // userId : "sjpark"
            // ,nickName : "sjpark"
        };
        this.LETTER_DATA = {//쪽지 view 에 필요 한 데이터
            q_seq : "80"//해당 시컨스
            ,
            q_type : 'OUT'//쪽지 타입 수신 :  IN,        발신  : OUT
            ,
            q_ynSaved : 'Y' // 보관여부 : Y or N
        };
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 부킹 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.calendar = new Calendar();
        this.time_list = new TimeList();
        this.booking_view = new BookingView();
        this.booking_view_price = new BookingViewPrice();
        this.booking_view_course = new BookingViewCourse();
        this.booking_set_pop = new BookingSetPop();
        this.wait_list = new WaitList();
        this.booking_account = new BookingAccount();
        this.booking_account_ok = new BookingAccountOk();

        this.booking_my_setup = new BookingMySetup();
        this.booking_my_setup_fix = new BookingMySetupFix();
        this.booking_my_setup_pop = new BookingMySetupPop();

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 조인룸 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.join_room = new JoinRoom();
        this.join_room_create = new JoinRoomCreate();
        this.join_room_modify = new JoinRoomModify();
        this.join_room_my = new JoinRoomMy();
        this.join_room_search = new JoinRoomSearch();
        this.join_room_view = new JoinRoomView();
        this.join_room_view_my = new JoinRoomViewMy();
        this.join_room_help = new JoinRoomHelp();
        this.join_room_pw = new JoinRoomPw();
        this.join_room_person = new JoinRoomPerson();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 조인룸 관련 DATA
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // seq 번호
        this.joinRoomSeq = null;
        // 비밀번호
        this.joinRoomItemPw = null;
        // 내가만든조인룸 뷰 ----> 수정  으로 이동시 폼 데이터 넘김
        this.joinRoomModifyFormData = null;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 코스공략 관련 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.course = new Course();
        this.course_my = new CourseMy();
        this.course_search = new CourseSearch();
        this.course_view = new CourseView();
        this.course_write = new CourseWrite();
        this.nice_shot = new NiceShot();
        this.COURSE_DATA = null;
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 테스트 아이디 정보
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        this.userId = "";
        // seq 번호
        this.password = "";
        // 비밀번호
        this.nickname = "";
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 기타 Class
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 기타 편의성을 위한 class
        this.util = new Util();
        // 팝업 class
        this.popup = new Popup();
    };
    GlobalObj.prototype = {
        constructor : GlobalObj
    };

    $(document).ready(function() {
        document.globalObj = new GlobalObj();

        // 페이지가 변경될때마다 호출될 이벤트 등록
        $(document).bind('pageinit', function($event) {
            // 상단 메인 메뉴 버튼 이벤트
            $($event.target).find("#main_menu_btn").click(function() {
                // $(".ui-page-active").animate({marginLeft:"165px"}, 300, function(){});
                $.mobile.changePage("../inc/navi.html");
            });

            // 상단 메인 메뉴 버튼 이벤트
            $($event.target).find("#main_noti_btn").click(function() {
                // $(".ui-page-active").animate({marginLeft:"165px"}, 300, function(){});
                $.mobile.changePage("../inc/info_booking.html");
            });

            // 페이지 로드했을 때 Container의 id와 동일한 인스턴스 명의 class의 onPageShow 호출
            if ($($event.target).attr('id') != undefined)
                document.globalObj[$($event.target).attr('id')].onPageShow();

            $(this).find('a').attr('data-transition', 'none');
        });

        var isLoadingComplete = false;
        var intervalCnt = 0;
        var intervalId = setInterval(function() {
            if (intervalCnt == 90 && !isLoadingComplete) {
                // 로딩이 완료가 되어있지 않을때 로딩 중으로 진행
                return;
            }
            intervalCnt++;
            $('div.per').html(intervalCnt + "%")
            if (intervalCnt == 100) {
                clearInterval(intervalId);
                if (document.globalObj.LOGIN_DATA.isLogin) {
                    // 로그인 되었을때
                    $.mobile.changePage("my_index.html");
                } else {
                    // 로그인이 안되었을때
                    $.mobile.changePage("index.html");
                }
            }
        }, 20);
        // window.localStorage.clear();
        if (document.globalObj.LOGIN_DATA.isLogin) {
            // 로그인이 되어 있을 때
            isLoadingComplete = true;
            // $.mobile.changePage("my_index.html");
        } else {
            // 로그인이 되어 있지 않을 때
            // 자동 로그인 여부 체크
            if (window.localStorage.getItem(document.globalObj.STORAGE_KEY.login_isauto) == "on") {
                // 로그인 시도
                var mj = new MJson();
                var cm = new ConnectionManager();

                mj.putPub(MJson.PUB.SID, "US001");
                mj.putPub(MJson.PUB.SERVICENAME, "login");

                mj.putParameter(MJson.PARAMETER.USERID, window.localStorage.getItem(document.globalObj.STORAGE_KEY.login_auto_id));
                mj.putParameter(MJson.PARAMETER.PW, window.localStorage.getItem(document.globalObj.STORAGE_KEY.login_auto_pass));

                // console.log("request : " + mj.getJsonString());

                cm.requestGet(mj.getJsonString(), function(jsonData) {
                    // console.log("success :: " + JSON.stringify(jsonData));
                    if (mj.checkServiceResult(jsonData)) {
                        console.log('성공 :: 로그인');
                        document.globalObj.LOGIN_DATA.isLogin = true;
                        document.globalObj.LOGIN_DATA.userId = window.localStorage.getItem(document.globalObj.STORAGE_KEY.login_auto_id);
                        isLoadingComplete = true;
                        // $.mobile.changePage("my_index.html");
                    } else {
                        console.log('실패 :: 로그인');
                        alert("로그인에 실패 하였습니다.\n 다시 로그인해주세요.\n");
                        isLoadingComplete = true;
                        // $.mobile.changePage("index.html");
                    }
                }, function(e) {
                    //alert("error :: " + JSON.stringify(e));
                    alert("로그인에 실패 하였습니다.\n 다시 로그인해주세요.\n");
                    isLoadingComplete = true;
                });
                // document.globalObj.member_login.userLogin(document.globalObj)
            } else {
                // 비 로그인 페이지로 이동
                isLoadingComplete = true;
                // $.mobile.changePage("index.html");
            }
        }
    });
})(jQuery);
